// 卖书订单
const app = getApp()
var mqtt = require("../../utils/mqtt.min") //引入mqtt文件
var client = null
Page({

    /**
     * 页面的初始数据
     */
    data: {
        openid: '',
        bookList: [],
        UID:app.globalData.userInfo.uid,
        pubTopic: 'XingHuan/Shelf_Signal',    //发布订阅
        bookshelfInfo:""
    },
    // 获取售出书籍信息
    async getorder() {
    const list=await wx.p.request({
      url: app.globalData.url+'/sellbook_order/bookList',
      method:"GET",
      data:{
        uid:app.globalData.userInfo.uid,
      }
    })
    this.setData({
      bookList:list.data.data
    })
    },
    //获取openid
    getopenid() {
        this.setData({
          openid:app.globalData.userInfo.openId
        })
    },
    // 下架
    async delete(event) {
      //删除书架信息和待售卖信息
      const index = event.currentTarget.dataset.index;
      const deleteResult=await wx.p.request({
        url: app.globalData.url+'/sellbook_order/deleteSellBook/'+this.data.bookList[index].id,
        method:"DELETE"
      });
      if (deleteResult.data.code==1) {
        const newlist = this.data.bookList.slice();
        newlist.splice(index, 1); // 删除指定索引的元素
        
        this.setData({
          bookList: newlist
        });
      }
      wx.showToast({
        title: deleteResult.data.data,
      })
      
    },
    
    // 打开柜门
    async store_book(event) {
        var that = this
        const state=await wx.p.showModal({
          title: '提示',
          content: '请确认已到距您最近的书柜,再点击确认',
          showCancel: true, // 是否显示取消按钮
          cancelText: '取消', // 取消按钮的文字，默认为"取消"
          confirmText: '确定', // 确定按钮的文字，默认为"确定"
        });
        if(state.confirm==true){
          const index = event.currentTarget.dataset.index;
          //申请存放货架
          const casenum=await wx.p.request({
            url:app.globalData.url+"/sellbook_order/getcasenum",
            method:"GET",
            data:{
              id:this.data.bookList[index].id,
              shelfname:this.data.bookshelfInfo.shelfName
            }
          })
          console.log(casenum.data.data);
          client.publish(that.data.pubTopic, casenum.data.data)
          console.log('柜门打开成功')
            //放入书籍后，修改书籍状态
          
          const result=await wx.p.request({
            url: app.globalData.url+'/sellbook_order/changeSellBookState/'
            +this.data.bookList[index].id,
            method:"PUT"
          })
          wx.showToast({
            title: '柜门已开启',
          })
          const newlist = this.data.bookList.slice();
          newlist.splice(index, 1); // 删除指定索引的元素
          
          this.setData({
            bookList: newlist
          });
        }
      

        


        
        
    },
    async connectMq() {
      var that = this; // 连接选项
      const ca = await new Promise((resolve, reject) => {
        wx.getFileSystemManager().readFile({
          filePath: '/ca/emqxsl-ca.crt',
          encoding: 'utf-8',
          success: (res) => {
            resolve(res.data);
          },
          fail: (err) => {
            reject(err);
          }
        });
      });

      const options = {
          connectTimeout: 4000, // 超时时间
          // 认证信息 按自己需求填写
          ca:ca,
          clientId: 'XingHuan_1',
          port: '8084',
          username: 'XingHuan_1', // 服务器用户名             
          password: 'XingHuan', // 服务器密码         
      };
      
      client = mqtt.connect('wxs://ma0a8495.ala.cn-hangzhou.emqxsl.cn:8084/mqtt',options)
      client.on('connect', (e) => {
          console.log('服务器连接成功');
          client.subscribe('XingHuan/XingHuan_2', { qos: 0 }, function (err) {
              if (!err) {
                  console.log('订阅成功');
              }
          });
      });
      client.on('message', function (topic, message) {
          console.log('收到' + message.toString());
      });
      client.on('reconnect', (error) => {
          console.log('正在重连', error);
      });
      client.on('error', (error) => {
          console.log('连接失败', error);
      });
  },

    /**
     * 生命周期函数--监听页面加载
     */
    async onLoad(options) {
        await this.getopenid()
        await this.getorder()
        this.location()
        this.connectMq()
    },
    
    //用来找此时最近的书柜且可存的书柜
    location(){
      wx.showLoading({
        title: '正在查询书架',
        mask: true
      })
      var that=this
      wx.getLocation({
        type: 'gcj02', // 返回经纬度
        success: function(res) {
          var latitude = res.latitude; // 纬度
          var longitude = res.longitude; // 经度
          console.log('纬度：', latitude);
          console.log('经度：', longitude);
          wx.request({
            url:app.globalData.url+"/sellbook_order/findshortest",
            method:"GET",
            data:{
              latitude:latitude,
              longitude:longitude
            },success(res){
              wx.hideLoading();
              that.setData({
                bookshelfInfo:res.data.data
              })
              wx.showToast({
                title: '已为您找到距离最近的书柜',
                icon:"none"
              })
            }
          })
          
        },
        fail: function(error) {
          console.log('获取地理位置失败', error);
        }
      });
    },
    searchLocation(){
      var that=this
        wx.openLocation({
          latitude: Number(that.data.bookshelfInfo.shelflatitude),
          longitude: Number(that.data.bookshelfInfo.shelflongitude),
          name: that.data.bookshelfInfo.shelfName,
          address: that.data.bookshelfInfo.shelfAddress
        })
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {
      
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
      client.end();
      console.log("MQTT服务器已断开")
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    async onPullDownRefresh() {
        await this.getopenid()
        await this.getorder()
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})